/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Enlace;

/**
 *
 * @author lau
 */
public class CRC {

    private String PoliGenerador = new String("10001000000100001");

    public CRC() {
    }

    public String crc(int llega2) {

        Integer a = new Integer(0);
        String datos = new String();
        datos = a.toBinaryString(llega2);
        datos = (datos + "0000000000000000000000000000");
        return divi(datos);
    }

    public String divi(String dat) {
            String ret = new String();
            for (int i = 0; i < 17; i++) {
                if (PoliGenerador.charAt(i) == dat.charAt(i)) {
                    ret += "0";
                } else {
                    ret += "1";
                }
            }
            int i=0;
            for (i= 0; ret.charAt(i) == '0'; i++) {
                ret+="0";
            }
            ret = ret.substring(i);
        return ret;
    }

    public boolean RectificarCRC(String Trama) {
        
        boolean EstaBien = false;
        Trama tramaaux = new Trama();
        String datosTrama = new String();
        String CrcTrama = new String();
        int datos = Integer.parseInt(tramaaux.DesarmarTramaDatos(Trama), 2);

        String auxiliar = new String();
        String crcCalculado = new String();
        System.out.println("datos: " + datos);
        datosTrama = tramaaux.DesarmarTramaDatos(Trama);
        CrcTrama = tramaaux.DesarmarTramaCRC(Trama);

        int i = 0;
        for (i = 0; CrcTrama.charAt(i) == '0'; i++);
        auxiliar = CrcTrama.substring(i, CrcTrama.length());


        System.out.println("crc de la trama: " + auxiliar);
        CRC c = new CRC();
        crcCalculado = c.crc(datos);
        System.out.println("crc calculado: " + crcCalculado);
        if (crcCalculado.equals(auxiliar)) {
            EstaBien = true;
        }
        return EstaBien;
    }
}

